from apps.verifications.constant import SMS_CODE_EXPIRES_MINUTE, SMS_CODE_TEMPLATE_ID
from celery_tasks.main import app
from libs.yuntongxun.sms import CCP

'''
bind = True 意味着将任务本身传递进去
任务的第一个参数为self  self就是任务本身

为什么要把self传递进去呢？ Task.retry()可以重试

raise ret.retry() 重新发送
 default_retry_delay  多少秒之后重新发送
 max_tries 默认发送3次，设置发送的次数
 name 表示任务名字
'''
# 生产者
@app.task(bind=True,default_retry_delay=10,name='itcast')
def send_sms_code(self,mobile,sms_code):
    try:
        ret = CCP().send_template_sms(mobile, [sms_code, SMS_CODE_EXPIRES_MINUTE], SMS_CODE_TEMPLATE_ID)

    except Exception as e:
        raise self.retry(exe=e)
    else:

        if ret !=0:
            raise  self.retry(exc=Exception('异常'),max_retries=5)
